﻿using System;
using System.Collections.Generic;
using System.Text;

namespace DataObjects.EntityFramework.Implementation
{
    /// <summary>
    /// Entity Framework specific factory that creates data access objects.
    /// </summary>
    /// <remarks>
    /// GoF Design Patterns: Factory.
    /// </remarks>
    public class EntityDaoFactory : IDaoFactory
    {
        /// <summary>
        /// Gets a Entity Framework specific category data access object.
        /// </summary>
        public ICategoryDao CategoryDao
        {
            get { return new EntityCategoryDao(); }
        }

        /// <summary>
        /// Gets a Entity Framework specific country data access object.
        /// </summary>
        public ICountryDao CountryDao
        {
            get { return new EntityCountryDao(); }
        }

        /// <summary>
        /// Gets an Entity Framework specific customer data access object.
        /// </summary>
        public ICustomerDao CustomerDao
        {
            get { return new EntityCustomerDao(); }
        }

        /// <summary>
        /// Gets an Entity Framework specific employee data access object.
        /// </summary>
        public IEmployeeDao EmployeeDao
        {
            get { return new EntityEmployeeDao(); }
        }

        /// <summary>
        /// Gets a Entity Framework specific order data access object.
        /// </summary>
        public IOrderDao OrderDao
        {
            get { return new EntityOrderDao(); }
        }

        /// <summary>
        /// Gets a Entity Framework specific order detail data access object.
        /// </summary>
        public IOrderDetailDao OrderDetailDao
        {
            get { return new EntityOrderDetailDao(); }
        }

        /// <summary>
        /// Gets a Entity Framework specific point data access object.
        /// </summary>
        public IPointDao PointDao
        {
            get { return new EntityPointDao(); }
        }

        /// <summary>
        /// Gets a Entity Framework specific product data access object.
        /// </summary>
        public IProductDao ProductDao
        {
            get { return new EntityProductDao(); }
        }

        /// <summary>
        /// Gets an Entity Framework specific province data access object.
        /// </summary>
        public IProvinceDao ProvinceDao
        {
            get { return new EntityProvinceDao(); }
        }

        /// <summary>
        /// Gets an Entity Framework specific service data access object.
        /// </summary>
        public IServiceDao ServiceDao
        {
            get { return new EntityServiceDao(); }
        }
        
        /// <summary>
        /// Gets an Entity Framework specific customer data access object.
        /// </summary>
        public ISupplierDao SupplierDao
        {
            get { return new EntitySupplierDao(); }
        }

        /// <summary>
        /// Gets an Entity Framework specific traffic data access object.
        /// </summary>
        public ITrafficDao TrafficDao
        {
            get { return new EntityTrafficDao(); }
        }

        /// <summary>
        /// Gets an Entity Framework specific trafficType data access object.
        /// </summary>
        public ITrafficTypeDao TrafficTypeDao
        {
            get { return new EntityTrafficTypeDao(); }
        }
    }
}
